import pymysql


# 定义数据库工具类
class DB_Tools(object):
# 创建连接方法 -类方法 可以直接使用类名进行使用
# 该方法写成私有方法即可，因为创建连接是方法里已经调用过的 对用户来说只需要使用uid和query方法即可
    @classmethod
    def __create_conn(cls):
        conn = pymysql.connect(host='192.168.1.92', port=3306, user='root', password='KhdMcoXgGDRvpJVd', database='mcp',
                               charset='utf8')
        # 返回创建好的连接，必选有返回
        return conn

# 数据库查询方法
    @classmethod
    def query_one(cls,sql):
        my_conn = None
        my_cursor = None
        res = None
        try:
            # 借助类方法调用create_conn 得到一个连接
            my_conn = DB_Tools.__create_conn()
            # 创建游标
            my_cursor = my_conn.cursor()
            # 通过游标编写sql
            my_cursor.execute(sql)
            # 提取记录
            res = my_cursor.fetchone()
            # 返回提取的记录res
        except Exception as error:
            print('执行查询失败！错误信息：',error)
        finally:
            # 关闭游标
            my_cursor.close()
            # 关闭连接 写再return之前
            my_conn.close()
            # 返回查询结果
            return res

# 数据库增删改方法
    @classmethod
    def db_uid(cls,sql):
        my_conn = None
        my_cursor = None
        res = None
        try:
            # 借助类方法调用create_conn 得到一个连接
            my_conn = DB_Tools.__create_conn()
            # 创建游标
            my_cursor = my_conn.cursor()
            # 通过游标编写sql
            res = my_cursor.execute(sql)
            # 提交事务
            my_conn.commit()
            print("Affected rows:", my_conn.affected_rows())
        except Exception as error:
            print('执行增删改失败！错误信息:',error)
            my_conn.rollback()
        finally:
            # 关闭游标
            my_cursor.close()
            # 关闭连接
            my_conn.close()
            # return res


if __name__ == '__main__':
    # 创建对象a 再通过a去调用方法query_one (比较麻烦！！！
    # a = DB_Tools()
    # print(a.query_one(sql="SELECT * FROM t_book"))
    # 改成类方法直接通过类名去调用
    # print(DB_Tools.query_one(sql="SELECT * FROM t_book"))
    # 调用增删改方法，这个时候不需要print 因为没有return
    DB_Tools.db_uid(sql="insert into t_book values('10','西游记4','2024-01-21','2','2','0')")